<?php

class Modmanager extends Model {

    function Modmanager()
    {
        parent::Model();
    }
    
    
    /**
     * Получение списка модулей 
     * @return array
     */
    public function get_modules() {
        
        $modules = dir(MODBASE);
        $res = array();
        
        while (false !== ($module = $modules->read())) {
          
            if($module != '.' && $module != '..'){
                
                if (false !== ($mod = $this->get_modul($module))) {
                    
                    $res[] = $mod;
                }
            }          
        }
        
        $modules->close();
        
        return $res;
    }
    
    
    /**
     * Получение конфигураци модуля
     * @param string $code Код модуля
     * @return object|object|boolean
     */
    public function get_modul($code) {
        
        $class = $code.'_ini';
        
        if(class_exists($class)) {
            
            return new $class();
        }
        
        if (is_file(MODBASE.$code.'/'.$class.EXT)) {
                    
            include(MODBASE.$code.'/'.$class.EXT);

            return new $class();
        }
        else {
            
            return false;
        }
    }
    
    
    /**
     * Установка модуля
     * @param string $code Код модуля
     * @return boolean
     */
    public function install($code) {
        
        $modul = $this->get_modul($code);
        
        if (method_exists($modul, 'install') && $modul->is_install) {
            
            $modul->install();
            
            $this->db->insert('settings', 
                array(
                    'modul' => 'install', 
                    'name' => $modul->code, 
                    'value' => 1,
                    'tip'   => 1,
                    'title' => lang('moduls_modul').' '.$modul->title
                ));
            
            return true;
        }
        
        return false;
    }
    
    
    /**
     * Удаление модуля
     * @param string $code Код модуля
     * @return boolean
     */
    public function uninstall($code) {
        
        $modul = $this->get_modul($code);
        
        if (method_exists($modul, 'uninstall') && $modul->is_install) {
            
            $modul->uninstall();
            $this->db->delete('settings', array('modul' => 'install', 'name' => $modul->code)); 
            return true;
        }
        
        return false;
    }
}